import json
import os

from qianfan import QfMessages, QfRole

from player.base.player import Player
import qianfan

"""
文心一言
通过环境变量初始化认证信息
方式一：【推荐】使用安全认证AK/SK鉴权
替换下列示例中参数，安全认证Access Key替换your_iam_ak，Secret Key替换your_iam_sk，如何获取请查看https://cloud.baidu.com/doc/Reference/s/9jwvz2egb
"""
os.environ["QIANFAN_ACCESS_KEY"] = "your_iam_ak"
os.environ["QIANFAN_SECRET_KEY"] = "your_iam_sk"
class ERNIEBotPlayer(Player):
    rule = """
     让我们开始一句五指棋游戏,现在需要你扮演一位五指棋选手。以下是游戏规则。
     1、游戏将会以json方式传入。board属性为二维的棋盘数组 pos为对手落子的最后位置 down_pos为已落子位置
     2、返回的位置不可以包含在down_pos中
     3、%i为是你的落子
     4、当棋子在任意直线方向上连成5颗棋子为胜利
     5、请阻挡你的对手获得胜利的同时让自己获得胜利
     6、无需返回示例代码只需要返回 [x,y]落子位置
    """

    def __init__(self):
        self.chat_comp = qianfan.ChatCompletion()
        self.messages = []
        self.index = 0

    def step(self, board, pos, code, down_pos) -> (int, int):
        if not self.index:
            self.messages.append({
                'role': 'user',
                'content': self.rule % self.user
            })

            self.messages.append({
                'role': 'user',
                'content': json.dumps({
                    'board': board,
                    'pos': pos,
                    'down_pos': down_pos
                })
            })
        else:
            self.messages[-1] = {
                'role': 'user',
                'content': json.dumps({
                    'board': board,
                    'pos': pos,
                    'down_pos': down_pos
                })
            }
        resp = self.chat_comp.do(model="ERNIE-3.5-8K", messages=self.messages)
        return_pos = json.loads(resp['body']['result'])
        self.index += 1
        return return_pos

    def ask_question(self, msg):

        # self.messages.append(resp)
        return resp


if __name__ == '__main__':
    player = ERNIEBotPlayer()
    while True:
        i = '让我们来一把五指棋游戏'
        d = {
            'role': 'user',
            'content': i
        }
        resp = player.ask_question(d)
        print(resp)
